www.gusucode.com > VC++ 解析emf文件结构并显示-源码程序 > VC++ 解析emf文件结构并显示-源码程序/code/EmfReader/UtilFunctions.cpp
//Download by http://www.NewXing.com #include "stdafx.h" #include "EmfReaderDlg.h" #define BFT_BITMAP 0x4d42 /* 'BM' */ #define BFT_SIZE 14 /* Size */ CString CEmfReaderDlg::GetFileNameAndExt( CString strPathFileName ) { TCHAR achDrive[_MAX_DRIVE]; TCHAR achDir[_MAX_DIR]; TCHAR achFile[_MAX_FNAME]; TCHAR achExt[_MAX_EXT]; _tsplitpath_s(strPathFileName, achDrive, achDir, achFile, achExt); CString fileName = achFile ; fileName += achExt ; return fileName ; } void CEmfReaderDlg::WriteToBMPFile( CString strFileName , LONG id , PBITMAPINFO pBitmapInfo , LPBYTE lpDib ) { CString szTempName ; szTempName.Format( L"e:\\temp\\emf\\%s_%d.bmp", GetFileNameAndExt(strFileName) , id ); CFile file ; CFileException ex; if( ! file.Open( szTempName , CFile::modeReadWrite|CFile::modeCreate,&ex)) { TCHAR szError[1024]; ex.GetErrorMessage(szError, 1024); TRACE(L"Couldn't open source file::%s,errormsg:s\n",szTempName,szError) ; return ; } BITMAPFILEHEADER bm; bm.bfType = BFT_BITMAP; bm.bfSize = pBitmapInfo->bmiHeader.biSizeImage + pBitmapInfo->bmiHeader.biSize + pBitmapInfo->bmiHeader.biClrUsed * 4 + sizeof( BITMAPFILEHEADER ) ; bm.bfReserved1 = 0; bm.bfReserved2 = 0; bm.bfOffBits = pBitmapInfo->bmiHeader.biSize + sizeof( BITMAPFILEHEADER ) + pBitmapInfo->bmiHeader.biClrUsed * 4 ; try{ file.Write( &bm , sizeof(BITMAPFILEHEADER) ) ; file.Write( pBitmapInfo , pBitmapInfo->bmiHeader.biSize + pBitmapInfo->bmiHeader.biClrUsed * 4) ; file.Write( lpDib , pBitmapInfo->bmiHeader.biSizeImage) ; }catch(...) { TCHAR szError[1024]; ex.GetErrorMessage(szError, 1024); TRACE(L"write file::%s,errormsg:s\n",szTempName,szError) ; } file.Close() ; return ; }